﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using Bastanteo.Persistencia;
using Bastanteo.Domain;
 
namespace Bastanteo.Tests
{
    [TestFixture]
    public class TestCliente
    {
       IClienteDAO  dao = null;
        Cliente creado = null;
        Cliente ClienteaCrear = new Cliente();

        [TestFixtureSetUp]
        public void InicializarPruebas()
        {

            dao = new Persistencia.ADO.ClienteDAO();
            ClienteaCrear.ClienteId = "40943616";
            ClienteaCrear.ClienteRuc = "1040943616";
            ClienteaCrear.ClienteRazonSocial = "HYM";
            //ClienteaCrear.ClienteInicioOperaciones = Format(Date.Now, "yyyy/MM/dd");
            ClienteaCrear.ClienteInicioOperaciones = DateTime.Now;
            ClienteaCrear.ClienteCantEmpleados = 100;
        }


        [Test]
        public void Test1_CrearCliente()
        {
            // - Validar que ocurra un error al intentar crear un cliente con un TipoEmpresa nulo
           

          
            
            Assert.Catch<Exception>(delegate
            {
                creado = dao.Crear(ClienteaCrear);
            });
            ClienteaCrear.ClienteTipoEmpresa = "S.A";
            
            // - Validar que se cree un cliente correctamente (sin error)
            Assert.DoesNotThrow(delegate
            {
                creado = dao.Crear(ClienteaCrear);
            });

            // - Validar que el cliente creado no sea nulo, tenga el id y el TipoEmpresa ingresados

            Assert.IsNotNull(creado);
            Assert.AreEqual(creado.ClienteId , ClienteaCrear.ClienteId );
            Assert.AreEqual(creado.ClienteTipoEmpresa , ClienteaCrear.ClienteTipoEmpresa );

        }

        [Test]
        public void Test2_ObtenerCliente()
        {
            Cliente Clienteobtenido = null;
            // - Validar que se retorne nulo al obtener un cliente que no existe
            Assert.DoesNotThrow(delegate
            {
                Clienteobtenido = dao.Obtener("");
            });
            Assert.IsNull(Clienteobtenido);
            // - Validar que se obtenga el cliente creado satisfactoriamente en el Test1 (que no sea nulo)
            Assert.DoesNotThrow(delegate
            {
                Clienteobtenido = dao.Obtener(creado.ClienteId );
            });
            Assert.IsNotNull(Clienteobtenido);
            // - Validar que el id obtenido sea el registrado anteriormente
            Assert.AreEqual(Clienteobtenido.ClienteId , creado.ClienteId );

        }


        [Test]
        public void Test3_EliminarCliente()
        {
            Cliente ClienteaEliminar = dao.Obtener(creado.ClienteId );
            // - Validar que ocurre un error si se intenta eliminar un cliente nulo
            Assert.Catch<Exception>(delegate
            {
                dao.Eliminar(null);
            });
            // - Validar que se elimina correctamente el cliente creado previamente
            Assert.DoesNotThrow(delegate
            {
                dao.Eliminar(ClienteaEliminar);
            });
            // - Validar que luego de eliminado se retorne nulo al obtenerlo de nuevo
            Cliente  ClienteEliminado = dao.Obtener(creado.ClienteId);
            Assert.IsNull(ClienteEliminado);

        }

        //[TestFixtureTearDown]
        //public void FinalizarPruebas()
        //{
        //    Persistencia.NH.NHibernateHelper.CerrarFabrica();
        //}


    }




}